package second00001;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pojo.Person;

/**
 * @author: ZhouBert
 * @date: 2020/7/25
 * @description:	Spring xml 配置的细节
 * 1.xml beans 配置可以不注明 beans id，若此，Spring 会自动生成：全限定名#0 的型设计；
 * TODO:此方式：如果该 beans 只需要使用一次，即可省略ID；如果需要使用多次，或者被其他 beans 引用，则需要设置 id ！
 * 2.name 属性
 * 作用：用于在 Spring 配置文件中，为 beans 对象定义别名（小名）
 * 比较两者的相同：
 * 1.ctx.getBean("id|name")--> object
 * 2.<beans id="" class=""
 * 等效于
 * <beans name="" class=""
 * 区别：
 * 1.别名可以定义多个（英文逗号分隔！），但是id 属性只能有一个
 * 2.XML 文件命名要求： 的 id 属性的值，命名要求：必须以字母开头（以前），后面跟字母 数字 下划线 连字符，不能以特殊字符开头，比如 /person。但是到现在是可以i用 /person 了
 * 而相对于 name 属性，则没有命名要求！
 * 3.代码上
 * ctx.containsBean -->  能判断 name + id ！！！
 * ctx.containsBeanDefinition --> 只能判断 beans id，而不能判断 beans name ！！！
 */
@Slf4j
public class TestApp4XmlConfiguation {

	ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");

	public void testBeanNames(){
		Person p1 = ctx.getBean("p1", Person.class);
		log.info(p1.toString());
	}

	public static void main(String[] args) {
		TestApp4XmlConfiguation testApp = new TestApp4XmlConfiguation();
		testApp.testBeanNames();

	}
}
